<?php

namespace app\xwam\controller;

/**
 * 控制器基础类
 * 
 * @since 1.0 <2015-3-18> SoChishun <14507247@qq.com> Added.
 */
class AppbaseController extends \think\Controller {

    /**
     * 站点编号
     * @var integer
     * @since 1.0 2016-5-11 SoChishun Added.
     */
    protected $siteId = 1;

    /**
     * 用户登录名
     * @var string 
     * @since 1.0 2016-5-30 SoChishun Added.
     */
    protected $userName = '';

    /**
     * 用户登录信息
     * @var array 
     */
    protected $loginData = array();

    /**
     * 控制器空操作方法
     * <br />空操作是指系统在找不到请求的操作方法的时候，会定位到空操作（_empty）方法来执行，利用这个机制，我们可以实现错误页面和一些URL的优化。
     * @since 1.0 <2015-3-23> SoChishun Added.
     */
    public function _empty() {
        return $this->fetch('public/404');
    }

    public function _initialize() {
        $siteConf = \think\Session::get('site_conf'); // 读取动态网站配置 2016-4-21
        $loginUrl = 'login/index';
        if (!$siteConf || isNull($siteConf)) {
            $this->redirect($loginUrl); // redirect会继续执行后面的代码，因此要加exit()退出
            exit();
        }
        // 站点是否关闭检测
        'Y' == $siteConf['site_status'] || exit($siteConf['site_closed_announcement']);
        // 用户登录检测
        if (false === ($this->loginData = \app\xwam\model\LoginModel::checkLogin(true))) {
            $this->redirect($loginUrl);
        }
        if (!empty($this->loginData['lang'])) { // 手动加载语言包 2016-5-9 SoChishun Added.            
            $file = MODULE_PATH . 'Lang/' . $this->loginData['lang'] . '.php';
            if (is_file($file)) {
                L(include $file); // 读取模块语言包
            }
        }
        $pagesize = empty($this->loginData['page_size']) ? $siteConf['content_list_rows'] : $this->loginData['page_size'];
        C('LIST_ROWS', $pagesize ? $pagesize : 25); // 设置全局分页尺寸变量 2016-5-6
        // 更新用户在线统计(影响性能,暂时关闭)
        // $m_login=new \app\xwam\model\LoginModel();
        // $m_login->refresh_login_info($msg);
        $this->siteId = $this->loginData['site_id']; // site_id赋值
        $this->userName = $this->loginData['user_name']; // 用户名赋值
        $this->assign('meta_title', $siteConf['site_title']); // 站点标题
        $this->assign('site_conf', $siteConf); // 站点配置
        $this->assign('login_data', $this->loginData); // 用户登录资料
        $this->assign('theme', empty($this->loginData['theme']) ? 'start' : $this->loginData['theme']); // 用户主题样式 2016-5-9
    }

    /**
     * 通用框架结果(对话框刷新父页面)
     * @param boolean $status 结果状态
     * @param string|array $error 错误消息
     * @param string $success 成功消息
     * @since 1.0 <2015-10-27> SoChishun Added.
     */
    function dialogJump($status, $error = '保存失败!', $success = '保存成功!') {
        if (false === $status) {
            $this->error(is_array($error) ? implode('<br />', $error) : $error);
        } else {
            $this->success($success, '!window.parent.location.reload();', 1);
        }
    }

    /**
     * 通用框架结果(对话框关闭,不刷新父页面)
     * @param boolean $status 结果状态
     * @param array $info array('success'=>'','error'=>'','ajax'=>'');
     * @since 2.0 2016-3-25 SoChishun 重构
     */
    function dialogClose($status, $info = array()) {
        $ainfo = array(
            'success' => '保存成功!',
            'error' => '保存失败!',
            'ajax' => '',
            'success_action' => '!window.parent.close_dialog(window.name);',
        );
        if ($info && is_array($info)) {
            $ainfo = array_merge($ainfo, $info);
        }
        if (false === $status) {
            if (is_array($ainfo['error'])) {
                $ainfo['error'] = implode('<br />', $ainfo['error']);
            }
            $this->error($ainfo['error']);
        } else {
            $this->success($ainfo['success'], $ainfo['success_action'], $ainfo['ajax']);
            // $this->success($success, '!$(\'iframe[name="\' + window.name + \'"]\').attr(\'src\', "about:blank").parent().dialog(\'close\');');
        }
    }

    /**
     * 格式化ajaxReturn的内容
     * @param boolean $status 状态
     * @param string $info 信息,占位符{%}会自动转换为"成功"或"失败"
     * @param string jsonpcb jsonp回调方法名称
     * @since 1.0 2014-11-27 by sutroon; 
     * @since 1.1 2014-12-16 by sutroon 新增jsonp支持
     * @since 2.0 <2015-6-10> SoChishun act_ajaxReturn()重构为 ajaxMsg().
     */
    protected function ajaxMsg($status, $info = '', $jsonpcb = '') {
        $msg = array('status' => (false === $status || is_null($status)) ? false : true, 'info' => (false === strpos($info, '{%}') ? $info : str_replace('{%}', $status ? '成功' : '失败', $info)));
        if ($jsonpcb) {
            echo $jsonpcb . '(' . json_encode($msg) . ')';
            exit;
        }
        $this->ajaxReturn($msg);
    }

}
